[1] (i) ¿Cómo representarías a una partícula en 1D con posición, velocidad y masa en Julia?
(ii) ¿Cómo moverías la partícula en un paso $\delta t$?
(iii) ¿Si necesitas otra partícula con las mismas propiedades, qué harías?
(iv) Para $N$ tales partículas, ¿qué podrías hacer?
El problema aquí es que la representación del concepto "partícula" está repartida en distintas variables. Julia provee una manera de recolectar la información de un "objeto", al definir un tipo compósito ("composite type"):
In [2]:
type MiTipo
a
b::Int
end
Esto define un tipo de objeto llamado MiTipo
. Cada objeto de este tipo tendrá adentro su propia copia de una variable llamada a
y otra llamada b
. En este caso, no hemos especificado ningún tipo para a
, mientras que b
está forzado a tener el tipo Int
.
[En general, en Julia, para anotar a una variable con un tipo dado, usamos esta notación con ::
.]
[2] Define un tipo que se llama Particula
, que tiene variables para la posición, velocidad y masa en una dimensión.
[3] Experimenta para ver cómo crear un objeto de tipo Particula
. [Pista: piensa en funciones]
[4] ¿Cómo podemos definir una función mover
que mueve la partícula en un paso de tiempo $\delta t$? [Pista: Para especificar que un objeto t
es de tipo MiTipo
, usamos la sintaxis t::MiTipo
.]
[5] Define un objeto Gas
que representa $N$ partículas, así como una función mover
que mueve el gas.
[6] Considera una estructura compuesta que denotaremos
${\overline v} = (f_v, d_v)$, que consta de dos campos f_v
y d_v
, que son flotantes. Esta estructura está definida de tal manera que se cumplen las siguientes propiedades:
i. Implementa esto usando Julia.
ii. Define un polinomio $p(x)$ cuya variable independiente es $x$. Evalúa el polinomio en ${\overline x}$ (variable independiente $x$), en $x_0=0$. ¿Qué interpretación tiene el valor obtenido para $d_x$? Y si en lugar de un polinomio utilizas un cociente de polinomios $r({\overline x}) = p({\overline x}) / q({\overline x})$?
iii. Pensando en la interpretación que le diste a $d_x$, cómo definirías la acción sobre ${\overline x}$ de las siguientes funciones:
iv. ¿Cómo podemos definir las cosas en Julia de tal manera que ${\overline v} + c$, y las demás posibles operaciones entre una variable compósita y un flotante $c$, tengan sentido?
[7] En el resto del curso, trataremos con aritmética de intervalos. En este nuevo tipo de aritmética, ocupamos intervalos $[a,b]$ de la recta real, que es el conjunto
$$[a, b] := \{x : a \le x \le b \}$$(i) Define un tipo composito para representar un intervalo de dos números reales.
(ii) ¿Cómo podríamos tener operaciones sensatas sobre los intervalos? La idea básica es que el resultado de la operación sobre dos intervalos contenga los valores posibles resultantes de operar con los miembros de los dos intervalos respectivos.
(iii) Implementa estas operaciones, sin tomar en cuenta cuestiones de redondeo.
(iv) ¿Cómo nos puede ayudar el redondeo? Impleméntalo.